package com.cskaoyan.javase.oop2._1extends._10final._2method;

/**
 * final修饰方法,表示最终的方法,最后的方法
 * 表示该方法虽然能够继承,但是不能重写.
 * 语法:
 * 以成员方法为例:
 * [访问权限修饰符] final 返回值类型 方法名(形参列表){
 *     // 方法体
 * }
 * 当然final修饰方法表示它无法被重写,但是该继承继承,该调用仍然可以调用
 *
 * 思考:
 * 什么样的方法需要设置为final?
 *      1.让用不让该.我觉得我写的方法很好,很强大,你爱用,不爱用自己写
 *      2.防止出现因为方法实现被重写导致的错误.这一点主要体现在源码中.
 *
 *
 * 什么样的方法不能用final修饰?
 *      1.构造方法不能用final修饰
 *      2.私有方法能够用final修饰,但是没有意义
 *      2.静态方法能够用final修饰,但是没有意义
 *
 * @since 17:36
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Son s = new Son();
        s.test();
    }
}

class Person {

    // Modifier 'final' not allowed here
    public Person() {
    }

    // 'private' method declared 'final'
    private final void test2(){}
    private static  void test3(){}

    // 这时eat方法就不能重写了,吃饭就正常吃饭
    public final void eat() {
        System.out.println("正常吃饭!");
    }
}
class LaoBa extends Person{
    // eat
}

class Father {
    public final void test() {
        System.out.println("6666");
    }

    public final void test(int a) {
        System.out.println("6666");
    }
}

class Son extends Father {
    // 'test()' cannot override 'test()' in 'com.cskaoyan.javase.oop2._1extends._10final._2method.Father'; overridden method is final
    // @Override
    // public void test() {
    //     super.test();
    // }
}
